package com.rbn.stockmobiledevices.dispositivos;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.rbn.stockmobiledevices.entradas.Estado;

@Controller
public class DispositivoController {
	
	private DispositivoManager dispositivoManager;
	
	@Autowired 
	public DispositivoController(DispositivoManager
			dispositivoManager) {
		this.dispositivoManager = dispositivoManager;
	}
	
	@RequestMapping(value="/getDispositivoDetail", method=RequestMethod.GET)
	public @ResponseBody Dispositivo getDetail(@RequestParam String codigo) {
		Dispositivo d = dispositivoManager.getById(codigo);
	    return d;
	}
	
	
	@RequestMapping(value = "/estados", method = RequestMethod.GET)
	public @ResponseBody
	Map<String, Object> getListaEstados(@RequestParam int iDisplayStart, @RequestParam int iDisplayLength,
			@RequestParam String sSearch, @RequestParam String sEcho) {

		Map<String, Object> map = new HashMap<String, Object>();
		List<Estado> estados = new ArrayList<Estado>();
		int total = 0;
		int filtered = 0;
		try{
			estados = dispositivoManager.getPaginadoEstados(null, null, null);
			total = estados.size();
			filtered = total;
			
			filtered = dispositivoManager.getPaginadoEstados(null, null, sSearch).size();
			estados = dispositivoManager.getPaginadoEstados(iDisplayStart, iDisplayLength, sSearch);
			
		}catch(Exception e){
			
		}
		map.put("sEcho", sEcho);
		map.put("iTotalRecords", String.valueOf(total));
		map.put("iTotalDisplayRecords", String.valueOf(filtered));
		map.put("lista", estados);

		return map;
	}
	
	@RequestMapping(value="/removeDispositivo", method=RequestMethod.GET)
	public @ResponseBody Map<String, Boolean> remove(@RequestParam String codigo) {
		HashMap<String, Boolean> valueReturn = new HashMap<String, Boolean>();
		boolean result = true;
		try{
			result = dispositivoManager.remove(codigo);
		}catch(Exception e){
			result = false;
		}
		valueReturn.put("status", result);
	    return valueReturn;
	}
	
	@RequestMapping(value="/updateDispositivo", method=RequestMethod.GET)
	public @ResponseBody Map<String, Boolean> update(@RequestParam String codigo, @RequestParam String modelo, @RequestParam int stockMinimo) {
		Dispositivo dispositivo = dispositivoManager.getById(codigo);
		//dispositivo.setCodigo(codigo);
		dispositivo.setModelo(modelo);
		dispositivo.setStockMinimo(stockMinimo);

		HashMap<String, Boolean> valueReturn = new HashMap<String, Boolean>();
		boolean result = true;
		
		try{
			dispositivoManager.update(dispositivo);
		}catch(Exception e){
			result = false;
		}
		valueReturn.put("status", result);
	    return valueReturn;
	}
	
	@RequestMapping(value="/addDispositivo", method=RequestMethod.GET)
	public @ResponseBody Map<String, Boolean> add(@RequestParam String codigo, @RequestParam String modelo, @RequestParam int stockMinimo) {
		boolean result = true;
		try{
			Dispositivo dispositivo = new Dispositivo();
			dispositivo.setCodigo(codigo);
			dispositivo.setModelo(modelo);
			dispositivo.setStockMinimo(stockMinimo);
			dispositivoManager.save(dispositivo);
		}catch (Exception e) {
			result = false;
		}
		HashMap<String, Boolean> valueReturn = new HashMap<String, Boolean>();
		valueReturn.put("status", result);
		
	    return valueReturn;
	}
	
	@RequestMapping(value = "/registrosHome", method = RequestMethod.GET)
	public String dispositivoList(Model model) {
		return "dispositivos.tiles";
	}
	
	@RequestMapping(value = "/dispositivos", method = RequestMethod.GET)
	public @ResponseBody
	Map<String, Object> getListaDispositivos(@RequestParam int iDisplayStart, @RequestParam int iDisplayLength,
			@RequestParam String sSearch, @RequestParam String sEcho) {

		Map<String, Object> map = new HashMap<String, Object>();
		List<Dispositivo> dispositivos = new ArrayList<Dispositivo>();
		int total = 0;
		int filtered = 0;
		try{
			dispositivos = dispositivoManager.getAll();
			total = dispositivos.size();
			filtered = total;
			
			filtered = dispositivoManager.getPaginadoDispositivos(null, null, sSearch).size();
			dispositivos = dispositivoManager.getPaginadoDispositivos(iDisplayStart, iDisplayLength, sSearch);
		}catch(Exception e){
			
		}
		map.put("sEcho", sEcho);
		map.put("iTotalRecords", String.valueOf(total));
		map.put("iTotalDisplayRecords", String.valueOf(filtered));
		map.put("dispositivos", dispositivos);

		return map;
	}
}